#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>

using namespace std;

#define BEGINS(x) namespace x {
#define ENDS(x) } // end of namespace x

struct Window {
    int l, r, t, b;
};

Window a, b ,t;


class BigInt : public vector<int> {
public:
    BigInt() = default;
    BigInt(int x) {
        push_back(x);
        process_digit();
    }
    BigInt operator+(const BigInt &bi) {
        BigInt tmp;
        if (this->size() >= bi.size()) {
            tmp = *this;
            for (int i = 0; i < size(); i++) {
                tmp.at(i) += bi.at(i);
            }
        } else {
            tmp = bi;
            for (int i = 0; i < size(); i++) {
                tmp.at(i) += this->at(i);
            }
        }
    }
    BigInt operator*(int n) const {
        BigInt tmp(*this);
        for (int i = 0; i < tmp.size(); i++) {
            tmp.at(i) * n;
        }
        tmp.process_digit();
        return tmp;
    }
    BigInt operator*(const BigInt &bi) const {
        BigInt tmp(0);
        for (int i = 0; i < this->size(); i++) {
            tmp = tmp + (bi * this->at(i));
            tmp.process_digit();
        }
        return tmp;
    }
    friend ostream &operator<<(ostream &out, const BigInt &bi) {
        for (int i = bi.size() - 1; i >= 0; i--) {
            out << bi.at(i);
        }
        return out;
    }
private:
    void process_digit() {
        for (int i = 0; i < size(); i++) {
            if (at(i) < 10) continue;
            if (i + 1 == size()) push_back(0);
            at(i + 1) += at(i) / 10;
            at(i) %= 10;
        }
        while (size() > 1 && at(size() - 1) == 0) {
            pop_back();
        }
    }
};

int main() {
    // cin >> a.l >> a.r >> a.t >> a.b;
    // cin >> b.l >> b.r >> b.t >> b.b;
    // t.l = max(a.l, b.l);
    // t.r = max(a.r, b.r);
    // t.t = max(a.t, b.t);
    // t.b = max(a.b, b.b);
    // int ans = 0;
    // if (t.l >= t.r || t.t >= t.b) {
    //     ans = 0;
    // } else {
    //     ans = (t.r - t.l) * (t.b - t.t);
    // }
    // cout << ans << endl;

    BigInt a(3);
    BigInt b(4);
    cout << a * b << endl;
    cout << a << endl;
    cout << b << endl;

    // int a1, b1, c1, d1;
    // int a2, b2, c2, d2;
    // BigInt ans = 0;
    // BigInt x, y;
    // cin >> a1 >> b1 >> c1 >> d1;
    // cin >> a2 >> b2 >> c2 >> d2;
    // if ((a1 <= a2 && a2 <= b1) || (a1 <= b2 && b2 <= b1)) {
    //     if ((c1 <= d2 && d2 <= d1) || (c1 <= c2 && c2 <= d1)) {
    //         x = (abs(c2 - d2) + abs(c1 - d1) - abs(c2 - c1) - abs(d2 - d1)) / 2;
    //         y = (abs(b2 - a2) + abs(b1 - a1) - abs(b2 - b1) - abs(a2 - a1)) / 2;
    //         ans = x * y;
    //     }
    // }
    // cout << ans << endl;
    // return 0;
}